// suppress GUID declaration
%define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) %enddef
%define DECLSPEC_UUID(x) %enddef
%define IN %enddef
%define OUT %enddef
%define FORCEINLINE __forceinline %enddef
%define CALLBACK __stdcall %enddef
%define REFIID IID & %enddef
%define __in %enddef
%define __in_ecount(x) %enddef
%define __in_opt %enddef
%define __inout %enddef
%define __out %enddef
%define __out_opt %enddef
%define __out_ecount(x) %enddef
%define _In_ %enddef
%define _In_opt_ %enddef
%define _In_reads_(x) %enddef
%define _In_reads_opt_(x) %enddef
%define _In_reads_bytes_(x) %enddef
%define _In_reads_bytes_opt_(x) %enddef
%define _Out_ %enddef
%define _Out_opt_ %enddef
%define _Out_writes_(x) %enddef
%define _Out_writes_opt_(x) %enddef
%define _Out_writes_bytes_(x) %enddef
%define _Out_writes_bytes_opt_(x) %enddef
%define _Out_writes_to_(x,y) %enddef
%define _Out_writes_to_opt_(x,y) %enddef
%define _Inout_ %enddef
%define _Inout_opt_ %enddef
%define _Outptr_result_buffer_(x) %enddef
%define _Reserved_ %enddef
%define _Analysis_noreturn_ %enddef
%define _Field_size_opt_(x) %enddef

%define STDMETHODCALLTYPE			__stdcall %enddef
%define STDMETHODVCALLTYPE			__cdecl %enddef
%define COM_DECLSPEC_NOTHROW %enddef
%define DECLSPEC_NOVTABLE			__declspec(novtable) %enddef
%define DECLSPEC_NORETURN			__declspec(noreturn) %enddef
%define __STRUCT__					struct %enddef
%define interface					__STRUCT__ %enddef 
%define STDMETHOD(method)			virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method %enddef
%define STDMETHOD_(type,method)		virtual COM_DECLSPEC_NOTHROW type STDMETHODCALLTYPE method %enddef
%define STDMETHODV(method)			virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODVCALLTYPE method %enddef
%define STDMETHODV_(type,method)	virtual COM_DECLSPEC_NOTHROW type STDMETHODVCALLTYPE method %enddef
%define PURE						= 0 %enddef
%define THIS_ %enddef
%define THIS						void %enddef
%define DECLARE_INTERFACE(iface)                        interface DECLSPEC_NOVTABLE iface %enddef
%define DECLARE_INTERFACE_(iface, baseiface)            interface DECLSPEC_NOVTABLE iface : public baseiface %enddef
%define DECLARE_INTERFACE_IID(iface, iid)               interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface %enddef
%define DECLARE_INTERFACE_IID_(iface, baseiface, iid)   interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public baseiface %enddef
%define WINAPIV						__cdecl %enddef

%feature("flatnested");

#define DEBUG_NO_IMPLEMENTATION

// define IUnknown
%ignore QueryInterface;
%ignore AddRef;
%ignore Release;

DECLARE_INTERFACE(IUnknown)
{
    STDMETHOD(QueryInterface)(
        THIS_
        REFIID InterfaceId,
        PVOID* Interface
        ) PURE;
    STDMETHOD_(ULONG, AddRef)(
        THIS
        ) PURE;
    STDMETHOD_(ULONG, Release)(
        THIS
        ) PURE;
};

%ignore ByteArray::GetBuffer;

%include "../common/ByteArray.h"
